[アップデート] AWS CodeBuild が macOS でのビルドをサポートしました
いわさです。
先日のアップデートで、AWS CodeBuild でついに macOS ビルドがサポートされるようになりました。
従来でも EC2 Mac インスタンスを用意して CodeBuild エージェントをインストールすることでセルフでビルド環境の構築は出来ていたのですが、より CodeBuild に統合される形で使いやすくなりました。
ただ、標準(Amazon Linux など)の CodeBuild の使い勝手と比較すると色々と注意事項があります。
今回実際にビルド実行するところまで試してみたので紹介します。
実際に試す前にいくつか知っておくべき注意事項があるので、そこだけ紹介します。
注意事項
オンデマンドフリートでは使用できず、リザーブドキャパシティフリートのみ
ご存知ではない方もおられるかもしれませんが、CodeBuild にはオンデマンドフリートとリザーブドキャパシティフリートという、ビルド実行環境に関する概念があります。
通常よく使われているのはオンデマンドフリートで、CodeBuild が提供するコンピューティングリソースをビルドに必要な時だけ使わせてもらう仕組みです。
一方でリザーブドキャパシティフリートというものもありまして、こちらは事前にユーザーが「コンピューティングフリート」というコンピューティングリソースをプロビジョニングしておき、CodeBuild のビルド環境設定ではそのフリートを指定するというものです。
半年くらい前に登場した機能です。
既にプロビジョニングされたリソースを使うので、カスタマイズされたビルド環境を使いまわしたり、あるいはプロビジョニングに時間がかかるようなものであれば時間の短縮を行うことが出来ます。
便利な機能じゃないかと思うのですが、料金に注意が必要でしてリザーブドキャパシティフリートの場合はビルドをしていない時間帯もフリートがプロビジョニングされている間は料金が発生し続けます。
そして、今回の macOS ビルド環境は、このリザーブドキャパシティフリートでのみ利用可能です。
まぁ EC2 Mac が Dedicated Host が前提になっているので、自然ですね。
今回のアップデートで次のように、リザーブドキャパシティ用のコンピューティングフリートでオペレーティングシステムに MacOS を指定出来るようになりました。
リザーブドキャパシティのプロビジョニングされている間はビルドをしなくても料金が発生し続けるという仕様を理解して使いましょう。
ちなみに CodeBuild の料金ページ(英語)も更新されていました。
抜粋すると、バージニア北部リージョンの場合は $0.02/分 か $0.036/分のインスタンスサイズを選択することが出来ます。
reserved.arm.m2.medium を 1ヶ月(730時間)プロビジョニングし続けたとすると、$876/月 ですね。
macOS の場合はリザーブドキャパシティフリートの最小割当期間は 24 時間
で、リザーブドキャパシティフリートには最小割当期間というものが存在します。
従来のリザーブドキャパシティフリートでは数分でフリートを削除しても最低 1 時間は割当がされ請求もされるというものでした。
EC2 Mac は Dedicated Host の仕組みが必要で、プロビジョニングから 24 時間経過しないとリリースが出来ませんでした。
そのため EC2 Mac は最低 24 時間分の料金が必要となっていました。
このあたりがかなり気になっていたのですが、実際に試してみたところ CodeBuild でも同様でした。
Linux や Windows と異なり、macOS をリザーブドキャパシティフリートで選択すると次のように最小割当期間が 24 時間に変更となりました。なるほど!!
ちょっと使ってすぐ削除すれば良いかは厳しいので、最小割当期間 24 時間の仕様についても知っておきましょう。
なので、最小の medium を数分だけビルドに使いたくても、24 時間使う必要があり、そうなると $28.8 は最低かかるわけです。
東京リージョンはまだ
対応しているリージョンですが、残念ながら東京リージョンではまだ使うことが出来ません。
今回 CodeBuild で使えるインスタンスタイプが M2 なので、まぁまだ EC2 のほうも対応されてないですからね。仕方ないか。
EC2 Mac の東京リージョンのサポート範囲が広がると CodeBuild の範囲も広がる気がしますけど、このあたりはどうでしょうかね。
東京リージョンでもリザーブドキャパシティフリートの作成は出来るのですが、上記のように macOS の選択は出来ません。
実際に構築してみよう
というわけでいくつか注意事項がありましたが、実際に使ってみましょう。
まずはリザーブドキャパシティなコンユ−ティングフリートを作成してみます。
上記のようにインスタンスタイプとしては Mac M2 がベースで 2 種類から選択が出来ます。
メモリ 24 GB の 8 vCPU か、メモリ 32 GB の 12 vCPU です。
OS バージョンですが、 macOS Sonoma のみ選択可能でした。
今回試していませんが、EC2 で用意したカスタムイメージを使うことも出来るようなので違うバージョンも選択出来るかもしれません。このあたりは別途試してみたいと思います。
フリートの作成時間は数秒でした。後述しますが、フリートの作成はすぐで初回だけビルドキューが処理されるまで時間がかかります。
2 回目以降はかなり高速です。
じゃあビルドしてみましょう。
CodeBuild プロジェクトを作成します。
プロビジョニングモデルに「リザーブドキャパシティ」を選択し、フリート名に用意したコンピューティングフリートを選択するだけです。
iOS のビルドなどを行うとなると、まぁ xcodebuild を使うと思うので、今回は Xcode のバージョン確認だけしてみましょう。次のような感じで。
ビルドプロジェクトが作成出来たらビルドを開始させましょう。
私のこの環境が最小構成だと思いますが、初回は 5 分ほど完了までかかりました。
ビルドログを見てみると、xcodebuild が動いていますね。
ちなみに Xcode のバージョンは 15.4 でした。現行の最新版ですね。
なお、2 回目以降は数秒でビルドが完了しました。おそらく 1 回目はコンピューティングフリートの初期化とかに時間がかかっているか、フリート作成後少し待つ必要があったのかなという感じです。
フリートの削除もしてみた(予約まで)
EC2 Mac と同様に 24 時間は削除出来ないのだろうなと思っていたのですが、試してみたところフリートの削除予約は出来るようでした。
手順はフリート一覧から削除したいフリートを選択して削除ボタンを押すだけです。フリートを参照しているプロジェクトが存在する状態でしたが削除操作の実行は出来ました。
プロビジョニングしてから 24 時間以内だったため、「削除保留」というステータスになっています。
メッセージによると 24 時間実行された後に削除され、それまでは削除保留ステータスでも引き続きビルドで使用出来るようですね。
さいごに
本日は AWS CodeBuild が macOS でのビルドをサポートしたので実際にビルドするところまで試してみました。
ついき来たか!と思った方も多かったと思うのですが、現状ではリザーブドキャパシティフリートが必要になるので、EC2 Mac と CodeBuild エージェントを使ってセルフマネージドな環境を構築するよりはちょっと楽になったかも。という感じでしょうかね。
そういった方は乗り換えを検討してみてください。
将来的にオンデマンドフリートで実行出来るようになると凄いのですが、出来るようになるだろうか。